package com.shujia.day16;

import java.io.*;

/*
    序列化：将对象转化成数据流一样在网络中传输
        对象输出流：ObjectOutputStream
        只有实现了Serializable接口的类的对象才可以进行序列化

    反序列化：将网络中数据流还原成一个对象
        对象输入流：ObjectInputStream

   我们正常写一个对象之后，读取一个对象都是没有问题的。
   但是当我们修改了原来的类的时候，再次读取存储的对象就报错了
   java.io.InvalidClassException:
    com.shujia.day16.Teacher;
    local class incompatible:
        stream class desc serialVersionUID = -4530247781226673719,
        local class serialVersionUID = -4180828856871739850

   若不想让某一个成员序列化的话，只需要在该成员前面加上transient关键字
 */
public class ObjectOutputStreamDemo1 {
    public static void main(String[] args) throws Exception{
//        write();

        read();
    }
    public static void read() throws Exception{
        //ObjectInputStream(InputStream in)
        //创建从指定的InputStream读取的ObjectInputStream
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("java/src/com/shujia/day16/obj.txt"));
        Object o = ois.readObject(); //Object o = new Teacher("小虎", 18)
        Teacher t1 = (Teacher)o;
        System.out.println(t1);


        ois.close();
    }

    public static void write() throws Exception{
        Teacher t1 = new Teacher("小虎", 18);
        //创建ObjectOutputStream对象
        //ObjectOutputStream(OutputStream out)
        //创建一个写入指定的OutputStream的ObjectOutputStream。
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("java/src/com/shujia/day16/obj.txt"));
        oos.writeObject(t1);
        oos.flush();

        //释放资源
        oos.close();
    }
}
